package utils;

import java.security.Security;
import java.util.Date;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

import com.sun.mail.smtp.SMTPTransport;

/**
 * Класс для работы с почтой
 * @author pocteg
 *
 */
public class Emailer
{
    /**
     * Отправка email
     * @param to Кому
     * @param title Заголовок
     * @param message Текст письма
     * @throws MessagingException
     */
    public static void sendEmail(String to, String title, String message) throws MessagingException
    {
	String userName = "maslov.rostislav";
	String password = "paradiseVShell";
	
	Emailer.Send(userName, password, to, "", title, message);
    }

    private static void Send(final String username, final String password, String recipientEmail, String ccEmail, String title, String message) throws AddressException,
	    MessagingException
    {
	Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
	final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

	// Get a Properties object
	Properties props = System.getProperties();
	props.setProperty("mail.smtps.host", "smtp.gmail.com");
	props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
	props.setProperty("mail.smtp.socketFactory.fallback", "false");
	props.setProperty("mail.smtp.port", "465");
	props.setProperty("mail.smtp.socketFactory.port", "465");
	props.setProperty("mail.smtps.auth", "true");

	/*
	 * If set to false, the QUIT command is sent and the connection is
	 * immediately closed. If set to true (the default), causes the
	 * transport to wait for the response to the QUIT command.
	 * 
	 * ref :
	 * http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp
	 * /package-summary.html
	 * http://forum.java.sun.com/thread.jspa?threadID=5205249 smtpsend.java
	 * - demo program from javamail
	 */
	props.put("mail.smtps.quitwait", "false");

	Session session = Session.getInstance(props, null);

	// -- Create a new message --
	final MimeMessage msg = new MimeMessage(session);

	// -- Set the FROM and TO fields --
	msg.setFrom(new InternetAddress(username + "@gmail.com"));
	msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail, false));

	if (ccEmail.length() > 0)
	{
	    msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccEmail, false));
	}

	msg.setSubject(title);
	msg.setText(message, "utf-8");
	msg.setSentDate(new Date());

	SMTPTransport t = (SMTPTransport) session.getTransport("smtps");

	t.connect("smtp.gmail.com", username, password);
	t.sendMessage(msg, msg.getAllRecipients());
	t.close();
    }
}
